package controllers

import (
	"GoWeb_Advanced/00_bluebell/logic"
	"GoWeb_Advanced/00_bluebell/models"

	"go.uber.org/zap"

	"github.com/gin-gonic/gin"
)

// PostVoteHandler 投票
func PostVoteHandler(ctx *gin.Context) {
	//参数校验
	p := new(models.ParamVoteData)
	if err := ctx.ShouldBindJSON(p); err != nil {
		//errs, ok := err.(validator.ValidationErrors) //类型断言，因为有可能传入的值还没有触发到 validator 这个库的规则时就报错了。比如：字段类型不一样
		//if !ok {
		//	ResponseError(ctx, CodeInvalidParam)
		//	return
		//}
		//errData := removeTopStruct(errs.Translate(trans)) //翻译并去除错误提示中的结构体标识
		//ResponseErrorWithMsg(ctx, CodeInvalidParam, errData)
		//return
		ResponseErrorWithMsg(ctx, CodeInvalidParam, err.Error())
		return
	}
	//获取当前请求的用户ID
	userID, err := GetCurrentUserID(ctx)
	if err != nil {
		ResponseError(ctx, CodeNeedLogin)
		return
	}
	//具体投票的业务逻辑
	if err = logic.VoteForPost(userID, p); err != nil {
		zap.L().Error("logic.VoteForPost() failed", zap.Error(err))
		ResponseError(ctx, CodeServerBusy)
		return
	}
	ResponseSuccess(ctx, nil)
}
